home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-08-18 | 3.0 KB | 93 lines |
- ' Plasma
- ' ~~~~~~
- ' by Ben Wyatt, bwyatt@paston.co.uk
-
- ' Creates highy attractive random plasma patterns :)
- ' Uses very long variable names for no reason :-\
-
- Degree
- Randomize Timer
-
- Screen Open 0,320,256,16,Lowres
- Screen Display 0,128,37,320,256
- Flash Off : Curs Off : Cls 0
-
- _PLASMA[Rnd(9)+1,32,256,Rnd(32),Rnd(32),1]
- Screen 0 : Get Palette(1)
- _COPYACROSS[0,0,320,256,32,256,1,0]
- Screen Close 1
- Screen 0
-
- ' Create some nice fading effects
- Repeat
- SPD=1+Rnd(7)
- Gosub 0+Rnd(5)
- CN=0
- Repeat
- MK=Mouse Key
- Inc CN
- Wait Vbl
- Until MK or CN>SPD*16
- Until MK
-
- Direct
-
- 0 Fade SPD,$0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0 : Return
- 1 Fade SPD,$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F : Return
- 2 Fade SPD,$F,$1F,$2F,$3F,$4F,$5F,$6F,$7F,$8F,$9F,$AF,$BF,$CF,$DF,$EF,$FF : Return
- 3 Fade SPD,$0,$100,$200,$300,$400,$500,$600,$700,$800,$900,$A00,$B00,$C00,$D00,$E00,$F00 : Return
- 4 Fade SPD,$F,$10F,$20F,$30F,$40F,$50F,$60F,$70F,$80F,$90F,$A0F,$B0F,$C0F,$D0F,$E0F,$F0F : Return
- 5 Fade SPD,$F0,$1F0,$2F0,$3F0,$4F0,$5F0,$6F0,$7F0,$8F0,$9F0,$AF0,$BF0,$CF0,$DF0,$EF0,$FF0 : Return
-
- Procedure _PLASMA[WIDTHOFBARS,PATTERNWIDTH,PATTERNHEIGHT,XSIZE,YSIZE,SPSCREEN]
-
- ' Draws a plasma, the parameters:
- ' WIDTHOFBARS - the width of each of the bars
- ' PATTERNWIDTH - width of the pattern
- ' PATTERNHEIGHT - height of the pattern
- ' XSIZE - amount it wobbles it across (in pixels)
- ' YSIZE - amount it wobbles it down (in pixels)
- ' SPSCREEN - the number of an undefined screen (spare)
-
- Screen Open SPSCREEN,PATTERNWIDTH*4,PATTERNHEIGHT+PATTERNWIDTH*2,16,Lowres
- Screen Display SPSCREEN,152,37,PATTERNWIDTH,PATTERNHEIGHT
- Flash Off : Curs Off : Cls 0
- Palette $0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0
- ' You might prefer to have a screen hide here...
- Screen Offset SPSCREEN,PATTERNWIDTH,PATTERNWIDTH
-
- I=0 : D=1
- For Y=0 To PATTERNHEIGHT+PATTERNWIDTH*2 Step WIDTHOFBARS
- Add I,D
- If I=15 : D=-1 : End If
- If I=0 : D=1 : End If
- Cls I,0,YP To 320,Y
- YP=Y
- Next Y
-
- ' Wobble it across
- For X=1 To 319
- Screen Copy SPSCREEN,0,0,1,PATTERNHEIGHT+PATTERNWIDTH*2 To SPSCREEN,X,Cos((X*360)/PATTERNWIDTH)*XSIZE
- Next X
-
- ' Wobble it down :)
- For Y=0 To PATTERNHEIGHT+PATTERNWIDTH*2-1
- Screen Copy SPSCREEN,0,Y+1,319,Y+2 To SPSCREEN,Sin((Y*360)/PATTERNHEIGHT)*YSIZE,Y
- Next Y
-
- End Proc
-
- Procedure _COPYACROSS[X1,Y1,X2,Y2,PATTERNWIDTH,PATTERNHEIGHT,SPSCREEN,DESTSCREEN]
-
- ' Copy the plasma across the screen, parameters:
- ' X1,Y1,X2,Y2 - area to be filled with the plasma
- ' PATTERNWIDTH - the width of the pattern
- ' PATTERNHEIGHT - the height of the pattern
- ' SPSCREEN - screen number of the plasma
- ' DESTSCREEN - destination screen for the plasma to be copied to
-
- For X=X1 To X2 Step PATTERNWIDTH
- Screen Copy SPSCREEN,PATTERNWIDTH,PATTERNWIDTH,2*PATTERNWIDTH,PATTERNWIDTH+Y2-Y1 To DESTSCREEN,X,Y1
- Next X
-
- End Proc